home *** CD-ROM | disk | FTP | other *** search
- //////////////////////////////////////////////////////////////////////////////
- //
- // Copyright (c) Microsoft Corporation. All rights reserved.
- //
- // File: d3dx9shader.h
- // Content: D3DX Shader APIs
- //
- //////////////////////////////////////////////////////////////////////////////
-
- #include "d3dx9.h"
-
- #ifndef __D3DX9SHADER_H__
- #define __D3DX9SHADER_H__
-
-
- //---------------------------------------------------------------------------
- // D3DXTX_VERSION:
- // --------------
- // Version token used to create a procedural texture filler in effects
- // Used by D3DXFill[]TX functions
- //---------------------------------------------------------------------------
- #define D3DXTX_VERSION(_Major,_Minor) (('T' << 24) | ('X' << 16) | ((_Major) << 8) | (_Minor))
-
-
-
- //----------------------------------------------------------------------------
- // D3DXSHADER flags:
- // -----------------
- // D3DXSHADER_DEBUG
- // Insert debug file/line/type/symbol information.
- //
- // D3DXSHADER_SKIPVALIDATION
- // Do not validate the generated code against known capabilities and
- // constraints. This option is only recommended when compiling shaders
- // you KNOW will work. (ie. have compiled before without this option.)
- // Shaders are always validated by D3D before they are set to the device.
- //
- // D3DXSHADER_SKIPOPTIMIZATION (valid for D3DXCompileShader calls only)
- // Instructs the compiler to skip optimization steps during code generation.
- // Unless you are trying to isolate a problem in your code, and suspect the
- // compiler, using this option is not recommended.
- //
- // D3DXSHADER_PACKMATRIX_ROWMAJOR
- // Unless explicitly specified, matrices will be packed in row-major order
- // on input and output from the shader.
- //
- // D3DXSHADER_PACKMATRIX_COLUMNMAJOR
- // Unless explicitly specified, matrices will be packed in column-major
- // order on input and output from the shader. This is generally more
- // efficient, since it allows vector-matrix multiplication to be performed
- // using a series of dot-products.
- //----------------------------------------------------------------------------
-
- #define D3DXSHADER_DEBUG (1 << 0)
- #define D3DXSHADER_SKIPVALIDATION (1 << 2)
- #define D3DXSHADER_SKIPOPTIMIZATION (1 << 3)
- #define D3DXSHADER_PACKMATRIX_ROWMAJOR (1 << 4)
- #define D3DXSHADER_PACKMATRIX_COLUMNMAJOR (1 << 5)
-
-
-
- //----------------------------------------------------------------------------
- // D3DXHANDLE:
- // -----------
- // Handle values used to efficiently reference shader and effect parameters.
- // Strings can be used as handles. However, handles are not always strings.
- //----------------------------------------------------------------------------
-
- typedef LPCSTR D3DXHANDLE;
- typedef D3DXHANDLE *LPD3DXHANDLE;
-
-
- //----------------------------------------------------------------------------
- // D3DXMACRO:
- // ----------
- // Preprocessor macro definition. The application pass in a NULL-terminated
- // array of this structure to various D3DX APIs. This enables the application
- // to #define tokens at runtime, before the file is parsed.
- //----------------------------------------------------------------------------
-
- typedef struct _D3DXMACRO
- {
- LPCSTR Name;
- LPCSTR Definition;
-
- } D3DXMACRO, *LPD3DXMACRO;
-
-
- //----------------------------------------------------------------------------
- // D3DXSEMANTIC:
- //----------------------------------------------------------------------------
-
- typedef struct _D3DXSEMANTIC
- {
- UINT Usage;
- UINT UsageIndex;
-
- } D3DXSEMANTIC, *LPD3DXSEMANTIC;
-
-
-
- //----------------------------------------------------------------------------
- // D3DXFRAGMENT_DESC:
- //----------------------------------------------------------------------------
-
- typedef struct _D3DXFRAGMENT_DESC
- {
- LPCSTR Name;
- DWORD Target;
-
- } D3DXFRAGMENT_DESC, *LPD3DXFRAGMENT_DESC;
-
-
- //----------------------------------------------------------------------------
- // D3DXREGISTER_SET:
- //----------------------------------------------------------------------------
-
- typedef enum _D3DXREGISTER_SET
- {
- D3DXRS_BOOL,
- D3DXRS_INT4,
- D3DXRS_FLOAT4,
- D3DXRS_SAMPLER,
-
- // force 32-bit size enum
- D3DXRS_FORCE_DWORD = 0x7fffffff
-
- } D3DXREGISTER_SET, *LPD3DXREGISTER_SET;
-
-
- //----------------------------------------------------------------------------
- // D3DXPARAMETER_CLASS:
- //----------------------------------------------------------------------------
-
- typedef enum _D3DXPARAMETER_CLASS
- {
- D3DXPC_SCALAR,
- D3DXPC_VECTOR,
- D3DXPC_MATRIX_ROWS,
- D3DXPC_MATRIX_COLUMNS,
- D3DXPC_OBJECT,
- D3DXPC_STRUCT,
-
- // force 32-bit size enum
- D3DXPC_FORCE_DWORD = 0x7fffffff
-
- } D3DXPARAMETER_CLASS, *LPD3DXPARAMETER_CLASS;
-
-
- //----------------------------------------------------------------------------
- // D3DXPARAMETER_TYPE:
- //----------------------------------------------------------------------------
-
- typedef enum _D3DXPARAMETER_TYPE
- {
- D3DXPT_VOID,
- D3DXPT_BOOL,
- D3DXPT_INT,
- D3DXPT_FLOAT,
- D3DXPT_STRING,
- D3DXPT_TEXTURE,
- D3DXPT_TEXTURE1D,
- D3DXPT_TEXTURE2D,
- D3DXPT_TEXTURE3D,
- D3DXPT_TEXTURECUBE,
- D3DXPT_SAMPLER,
- D3DXPT_SAMPLER1D,
- D3DXPT_SAMPLER2D,
- D3DXPT_SAMPLER3D,
- D3DXPT_SAMPLERCUBE,
- D3DXPT_PIXELSHADER,
- D3DXPT_VERTEXSHADER,
- D3DXPT_PIXELFRAGMENT,
- D3DXPT_VERTEXFRAGMENT,
-
- // force 32-bit size enum
- D3DXPT_FORCE_DWORD = 0x7fffffff
-
- } D3DXPARAMETER_TYPE, *LPD3DXPARAMETER_TYPE;
-
-
- //----------------------------------------------------------------------------
- // D3DXCONSTANTTABLE_DESC:
- //----------------------------------------------------------------------------
-
- typedef struct _D3DXCONSTANTTABLE_DESC
- {
- LPCSTR Creator; // Creator string
- DWORD Version; // Shader version
- UINT Constants; // Number of constants
-
- } D3DXCONSTANTTABLE_DESC, *LPD3DXCONSTANTTABLE_DESC;
-
-
- //----------------------------------------------------------------------------
- // D3DXCONSTANT_DESC:
- //----------------------------------------------------------------------------
-
- typedef struct _D3DXCONSTANT_DESC
- {
- LPCSTR Name; // Constant name
-
- D3DXREGISTER_SET RegisterSet; // Register set
- UINT RegisterIndex; // Register index
- UINT RegisterCount; // Number of registers occupied
-
- D3DXPARAMETER_CLASS Class; // Class
- D3DXPARAMETER_TYPE Type; // Component type
-
- UINT Rows; // Number of rows
- UINT Columns; // Number of columns
- UINT Elements; // Number of array elements
- UINT StructMembers; // Number of structure member sub-parameters
-
- UINT Bytes; // Data size, in bytes
- LPCVOID DefaultValue; // Pointer to default value
-
- } D3DXCONSTANT_DESC, *LPD3DXCONSTANT_DESC;
-
-
-
- //----------------------------------------------------------------------------
- // ID3DXConstantTable:
- //----------------------------------------------------------------------------
-
- typedef interface ID3DXConstantTable ID3DXConstantTable;
- typedef interface ID3DXConstantTable *LPD3DXCONSTANTTABLE;
-
- // {9DCA3190-38B9-4fc3-92E3-39C6DDFB358B}
- DEFINE_GUID( IID_ID3DXConstantTable,
- 0x9dca3190, 0x38b9, 0x4fc3, 0x92, 0xe3, 0x39, 0xc6, 0xdd, 0xfb, 0x35, 0x8b);
-
-
- #undef INTERFACE
- #define INTERFACE ID3DXConstantTable
-
- DECLARE_INTERFACE_(ID3DXConstantTable, ID3DXBuffer)
- {
- // IUnknown
- STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
- STDMETHOD_(ULONG, AddRef)(THIS) PURE;
- STDMETHOD_(ULONG, Release)(THIS) PURE;
-
- // ID3DXBuffer
- STDMETHOD_(LPVOID, GetBufferPointer)(THIS) PURE;
- STDMETHOD_(DWORD, GetBufferSize)(THIS) PURE;
-
- // Descs
- STDMETHOD(GetDesc)(THIS_ D3DXCONSTANTTABLE_DESC *pDesc) PURE;
- STDMETHOD(GetConstantDesc)(THIS_ D3DXHANDLE hConstant, D3DXCONSTANT_DESC *pConstantDesc, UINT *pCount) PURE;
-
- // Handle operations
- STDMETHOD_(D3DXHANDLE, GetConstant)(THIS_ D3DXHANDLE hConstant, UINT Index) PURE;
- STDMETHOD_(D3DXHANDLE, GetConstantByName)(THIS_ D3DXHANDLE hConstant, LPCSTR pName) PURE;
- STDMETHOD_(D3DXHANDLE, GetConstantElement)(THIS_ D3DXHANDLE hConstant, UINT Index) PURE;
-
- // Set Constants
- STDMETHOD(SetDefaults)(THIS_ LPDIRECT3DDEVICE9 pDevice) PURE;
- STDMETHOD(SetValue)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, LPCVOID pData, UINT Bytes) PURE;
- STDMETHOD(SetBool)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, BOOL b) PURE;
- STDMETHOD(SetBoolArray)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST BOOL* pb, UINT Count) PURE;
- STDMETHOD(SetInt)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, INT n) PURE;
- STDMETHOD(SetIntArray)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST INT* pn, UINT Count) PURE;
- STDMETHOD(SetFloat)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, FLOAT f) PURE;
- STDMETHOD(SetFloatArray)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST FLOAT* pf, UINT Count) PURE;
- STDMETHOD(SetVector)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST D3DXVECTOR4* pVector) PURE;
- STDMETHOD(SetVectorArray)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST D3DXVECTOR4* pVector, UINT Count) PURE;
- STDMETHOD(SetMatrix)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST D3DXMATRIX* pMatrix) PURE;
- STDMETHOD(SetMatrixArray)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST D3DXMATRIX* pMatrix, UINT Count) PURE;
- STDMETHOD(SetMatrixPointerArray)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE;
- STDMETHOD(SetMatrixTranspose)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST D3DXMATRIX* pMatrix) PURE;
- STDMETHOD(SetMatrixTransposeArray)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST D3DXMATRIX* pMatrix, UINT Count) PURE;
- STDMETHOD(SetMatrixTransposePointerArray)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE;
- };
-
-
- //----------------------------------------------------------------------------
- // ID3DXFragmentLinker
- //----------------------------------------------------------------------------
-
- #undef INTERFACE
- #define INTERFACE ID3DXFragmentLinker
-
- // {D59D3777-C973-4a3c-B4B0-2A62CD3D8B40}
- DEFINE_GUID(IID_ID3DXFragmentLinker,
- 0xd59d3777, 0xc973, 0x4a3c, 0xb4, 0xb0, 0x2a, 0x62, 0xcd, 0x3d, 0x8b, 0x40);
-
-
- DECLARE_INTERFACE_(ID3DXFragmentLinker, IUnknown)
- {
- // IUnknown
- STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
- STDMETHOD_(ULONG, AddRef)(THIS) PURE;
- STDMETHOD_(ULONG, Release)(THIS) PURE;
-
- // ID3DXFragmentLinker
-
- // fragment access and information retrieval functions
- STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE9* ppDevice) PURE;
- STDMETHOD_(UINT, GetNumberOfFragments)(THIS) PURE;
-
- STDMETHOD_(D3DXHANDLE, GetFragmentHandleByIndex)(THIS_ UINT Index) PURE;
- STDMETHOD_(D3DXHANDLE, GetFragmentHandleByName)(THIS_ LPCSTR Name) PURE;
- STDMETHOD(GetFragmentDesc)(THIS_ D3DXHANDLE Name, LPD3DXFRAGMENT_DESC FragDesc) PURE;
-
- // add the fragments in the buffer to the linker
- STDMETHOD(AddFragments)(THIS_ CONST DWORD *Fragments) PURE;
-
- // Create a buffer containing the fragments. Suitable for saving to disk
- STDMETHOD(GetAllFragments)(THIS_ LPD3DXBUFFER *ppBuffer) PURE;
- STDMETHOD(GetFragment)(THIS_ D3DXHANDLE Name, LPD3DXBUFFER *ppBuffer) PURE;
-
- STDMETHOD(LinkShader)(THIS_ LPCSTR pTarget, DWORD Flags, LPD3DXHANDLE rgFragmentHandles, UINT cFragments, LPD3DXBUFFER *ppBuffer, LPD3DXBUFFER *ppErrorMsgs) PURE;
- STDMETHOD(LinkVertexShader)(THIS_ LPCSTR pTarget, DWORD Flags, LPD3DXHANDLE rgFragmentHandles, UINT cFragments, LPDIRECT3DVERTEXSHADER9 *pVShader, LPD3DXBUFFER *ppErrorMsgs) PURE;
-
- STDMETHOD(ClearCache)(THIS) PURE;
- };
-
-
- //----------------------------------------------------------------------------
- // D3DXINCLUDE_TYPE:
- //----------------------------------------------------------------------------
-
- typedef enum _D3DXINCLUDE_TYPE
- {
- D3DXINC_LOCAL,
- D3DXINC_SYSTEM,
-
- // force 32-bit size enum
- D3DXINC_FORCE_DWORD = 0x7fffffff
-
- } D3DXINCLUDE_TYPE, *LPD3DXINCLUDE_TYPE;
-
-
- //----------------------------------------------------------------------------
- // ID3DXInclude:
- // -------------
- // This interface is intended to be implemented by the application, and can
- // be used by various D3DX APIs. This enables application-specific handling
- // of #include directives in source files.
- //
- // Open()
- // Opens an include file. If successful, it should fill in ppData and
- // pBytes. The data pointer returned must remain valid until Close is
- // subsequently called.
- // Close()
- // Closes an include file. If Open was successful, Close is guaranteed
- // to be called before the API using this interface returns.
- //----------------------------------------------------------------------------
-
- typedef interface ID3DXInclude ID3DXInclude;
- typedef interface ID3DXInclude *LPD3DXINCLUDE;
-
- #undef INTERFACE
- #define INTERFACE ID3DXInclude
-
- DECLARE_INTERFACE(ID3DXInclude)
- {
- STDMETHOD(Open)(D3DXINCLUDE_TYPE IncludeType, LPCSTR pFileName, LPCVOID pParentData, LPCVOID *ppData, UINT *pBytes) PURE;
- STDMETHOD(Close)(LPCVOID pData) PURE;
- };
-
-
- //////////////////////////////////////////////////////////////////////////////
- // APIs //////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////
-
- #ifdef __cplusplus
- extern "C" {
- #endif //__cplusplus
-
-
- //----------------------------------------------------------------------------
- // D3DXAssembleShader:
- // -------------------
- // Assembles a shader.
- //
- // Parameters:
- // pSrcFile
- // Source file name
- // hSrcModule
- // Module handle. if NULL, current module will be used
- // pSrcResource
- // Resource name in module
- // pSrcData
- // Pointer to source code
- // SrcDataLen
- // Size of source code, in bytes
- // pDefines
- // Optional NULL-terminated array of preprocessor macro definitions.
- // pInclude
- // Optional interface pointer to use for handling #include directives.
- // If this parameter is NULL, #includes will be honored when assembling
- // from file, and will error when assembling from resource or memory.
- // Flags
- // See D3DXSHADER_xxx flags
- // ppShader
- // Returns a buffer containing the created shader. This buffer contains
- // the assembled shader code, as well as any embedded debug info.
- // (See D3DXGetShaderDebugInfo)
- // ppErrorMsgs
- // Returns a buffer containing a listing of errors and warnings that were
- // encountered during assembly. If you are running in a debugger,
- // these are the same messages you will see in your debug output.
- //----------------------------------------------------------------------------
-
-
- HRESULT WINAPI
- D3DXAssembleShaderFromFileA(
- LPCSTR pSrcFile,
- CONST D3DXMACRO* pDefines,
- LPD3DXINCLUDE pInclude,
- DWORD Flags,
- LPD3DXBUFFER* ppShader,
- LPD3DXBUFFER* ppErrorMsgs);
-
- HRESULT WINAPI
- D3DXAssembleShaderFromFileW(
- LPCWSTR pSrcFile,
- CONST D3DXMACRO* pDefines,
- LPD3DXINCLUDE pInclude,
- DWORD Flags,
- LPD3DXBUFFER* ppShader,
- LPD3DXBUFFER* ppErrorMsgs);
-
- #ifdef UNICODE
- #define D3DXAssembleShaderFromFile D3DXAssembleShaderFromFileW
- #else
- #define D3DXAssembleShaderFromFile D3DXAssembleShaderFromFileA
- #endif
-
-
- HRESULT WINAPI
- D3DXAssembleShaderFromResourceA(
- HMODULE hSrcModule,
- LPCSTR pSrcResource,
- CONST D3DXMACRO* pDefines,
- LPD3DXINCLUDE pInclude,
- DWORD Flags,
- LPD3DXBUFFER* ppShader,
- LPD3DXBUFFER* ppErrorMsgs);
-
- HRESULT WINAPI
- D3DXAssembleShaderFromResourceW(
- HMODULE hSrcModule,
- LPCWSTR pSrcResource,
- CONST D3DXMACRO* pDefines,
- LPD3DXINCLUDE pInclude,
- DWORD Flags,
- LPD3DXBUFFER* ppShader,
- LPD3DXBUFFER* ppErrorMsgs);
-
- #ifdef UNICODE
- #define D3DXAssembleShaderFromResource D3DXAssembleShaderFromResourceW
- #else
- #define D3DXAssembleShaderFromResource D3DXAssembleShaderFromResourceA
- #endif
-
-
- HRESULT WINAPI
- D3DXAssembleShader(
- LPCSTR pSrcData,
- UINT SrcDataLen,
- CONST D3DXMACRO* pDefines,
- LPD3DXINCLUDE pInclude,
- DWORD Flags,
- LPD3DXBUFFER* ppShader,
- LPD3DXBUFFER* ppErrorMsgs);
-
-
-
- //----------------------------------------------------------------------------
- // D3DXCompileShader:
- // ------------------
- // Compiles a shader.
- //
- // Parameters:
- // pSrcFile
- // Source file name.
- // hSrcModule
- // Module handle. if NULL, current module will be used.
- // pSrcResource
- // Resource name in module.
- // pSrcData
- // Pointer to source code.
- // SrcDataLen
- // Size of source code, in bytes.
- // pDefines
- // Optional NULL-terminated array of preprocessor macro definitions.
- // pInclude
- // Optional interface pointer to use for handling #include directives.
- // If this parameter is NULL, #includes will be honored when compiling
- // from file, and will error when compiling from resource or memory.
- // pFunctionName
- // Name of the entrypoint function where execution should begin.
- // pTarget
- // Instruction set to be used when generating code. Currently supported
- // targets are "vs_1_1", "vs_2_0", "vs_2_sw", "ps_1_1", "ps_1_2", "ps_1_3",
- // "ps_1_4", "ps_2_0", "ps_2_sw", "tx_1_0"
- // Flags
- // See D3DXSHADER_xxx flags.
- // ppShader
- // Returns a buffer containing the created shader. This buffer contains
- // the compiled shader code, as well as any embedded debug and symbol
- // table info. (See D3DXGetShaderDebugInfo, D3DXGetShaderConstantTable)
- // ppErrorMsgs
- // Returns a buffer containing a listing of errors and warnings that were
- // encountered during the compile. If you are running in a debugger,
- // these are the same messages you will see in your debug output.
- // ppConstantTable
- // Returns a ID3DXConstantTable object which can be used to set
- // shader constants to the device. Alternatively, an application can
- // parse the D3DXSHADER_CONSTANTTABLE block embedded as a comment within
- // the shader.
- //----------------------------------------------------------------------------
-
- HRESULT WINAPI
- D3DXCompileShaderFromFileA(
- LPCSTR pSrcFile,
- CONST D3DXMACRO* pDefines,
- LPD3DXINCLUDE pInclude,
- LPCSTR pFunctionName,
- LPCSTR pTarget,
- DWORD Flags,
- LPD3DXBUFFER* ppShader,
- LPD3DXBUFFER* ppErrorMsgs,
- LPD3DXCONSTANTTABLE* ppConstantTable);
-
- HRESULT WINAPI
- D3DXCompileShaderFromFileW(
- LPCWSTR pSrcFile,
- CONST D3DXMACRO* pDefines,
- LPD3DXINCLUDE pInclude,
- LPCSTR pFunctionName,
- LPCSTR pTarget,
- DWORD Flags,
- LPD3DXBUFFER* ppShader,
- LPD3DXBUFFER* ppErrorMsgs,
- LPD3DXCONSTANTTABLE* ppConstantTable);
-
- #ifdef UNICODE
- #define D3DXCompileShaderFromFile D3DXCompileShaderFromFileW
- #else
- #define D3DXCompileShaderFromFile D3DXCompileShaderFromFileA
- #endif
-
-
- HRESULT WINAPI
- D3DXCompileShaderFromResourceA(
- HMODULE hSrcModule,
- LPCSTR pSrcResource,
- CONST D3DXMACRO* pDefines,
- LPD3DXINCLUDE pInclude,
- LPCSTR pFunctionName,
- LPCSTR pTarget,
- DWORD Flags,
- LPD3DXBUFFER* ppShader,
- LPD3DXBUFFER* ppErrorMsgs,
- LPD3DXCONSTANTTABLE* ppConstantTable);
-
- HRESULT WINAPI
- D3DXCompileShaderFromResourceW(
- HMODULE hSrcModule,
- LPCWSTR pSrcResource,
- CONST D3DXMACRO* pDefines,
- LPD3DXINCLUDE pInclude,
- LPCSTR pFunctionName,
- LPCSTR pTarget,
- DWORD Flags,
- LPD3DXBUFFER* ppShader,
- LPD3DXBUFFER* ppErrorMsgs,
- LPD3DXCONSTANTTABLE* ppConstantTable);
-
- #ifdef UNICODE
- #define D3DXCompileShaderFromResource D3DXCompileShaderFromResourceW
- #else
- #define D3DXCompileShaderFromResource D3DXCompileShaderFromResourceA
- #endif
-
-
- HRESULT WINAPI
- D3DXCompileShader(
- LPCSTR pSrcData,
- UINT SrcDataLen,
- CONST D3DXMACRO* pDefines,
- LPD3DXINCLUDE pInclude,
- LPCSTR pFunctionName,
- LPCSTR pTarget,
- DWORD Flags,
- LPD3DXBUFFER* ppShader,
- LPD3DXBUFFER* ppErrorMsgs,
- LPD3DXCONSTANTTABLE* ppConstantTable);
-
- //----------------------------------------------------------------------------
- // D3DXFindShaderComment:
- // ----------------------
- // Searches through a shader for a particular comment, denoted by a FourCC in
- // the first DWORD of the comment. If the comment is not found, and no other
- // error has occurred, S_FALSE is returned.
- //
- // Parameters:
- // pFunction
- // Pointer to the function DWORD stream
- // FourCC
- // FourCC used to identify the desired comment block.
- // ppData
- // Returns a pointer to the comment data (not including comment token
- // and FourCC). Can be NULL.
- // pSizeInBytes
- // Returns the size of the comment data in bytes. Can be NULL.
- //----------------------------------------------------------------------------
-
- HRESULT WINAPI
- D3DXFindShaderComment(
- CONST DWORD* pFunction,
- DWORD FourCC,
- LPCVOID* ppData,
- UINT* pSizeInBytes);
-
-
- //----------------------------------------------------------------------------
- // D3DXGetShaderSemantics:
- // -----------------------
- // Gets semantics for all input elements referenced inside a given shader.
- //
- // Parameters:
- // pFunction
- // Pointer to the function DWORD stream
- // pSemantics
- // Pointer to an array of D3DXSEMANTIC structures. The function will
- // fill this array with the semantics for each input element referenced
- // inside the shader. This array is assumed to contain at least
- // MAXD3DDECLLENGTH elements.
- // pCount
- // Returns the number of elements referenced by the shader
- //----------------------------------------------------------------------------
-
- HRESULT WINAPI
- D3DXGetShaderInputSemantics(
- CONST DWORD* pFunction,
- D3DXSEMANTIC* pSemantics,
- UINT* pCount);
-
- HRESULT WINAPI
- D3DXGetShaderOutputSemantics(
- CONST DWORD* pFunction,
- D3DXSEMANTIC* pSemantics,
- UINT* pCount);
-
-
- //----------------------------------------------------------------------------
- // D3DXGetShaderSamplers:
- // ----------------------
- // Gets semantics for all input elements referenced inside a given shader.
- //
- // pFunction
- // Pointer to the function DWORD stream
- // pSamplers
- // Pointer to an array of LPCSTRs. The function will fill this array
- // with pointers to the sampler names contained within pFunction, for
- // each sampler referenced inside the shader. This array is assumed to
- // contain at least 16 elements.
- // pCount
- // Returns the number of samplers referenced by the shader
- //----------------------------------------------------------------------------
-
- HRESULT WINAPI
- D3DXGetShaderSamplers(
- CONST DWORD* pFunction,
- LPCSTR* pSamplers,
- UINT* pCount);
-
-
- //----------------------------------------------------------------------------
- // D3DXGetShaderConstantTable:
- // ---------------------------
- // Gets shader constant table embedded inside shader. A constant table is
- // generated by D3DXAssembleShader and D3DXCompileShader, and is embedded in
- // the body of the shader.
- //
- // Parameters:
- // pFunction
- // Pointer to the function DWORD stream
- // ppConstantTable
- // Returns a ID3DXConstantTable object which can be used to set
- // shader constants to the device. Alternatively, an application can
- // parse the D3DXSHADER_CONSTANTTABLE block embedded as a comment within
- // the shader.
- //----------------------------------------------------------------------------
-
- HRESULT WINAPI
- D3DXGetShaderConstantTable(
- CONST DWORD* pFunction,
- LPD3DXCONSTANTTABLE* ppConstantTable);
-
-
- //----------------------------------------------------------------------------
- // D3DXGetShaderDebugInfo:
- // -----------------------
- // Gets shader debug info. Debug info is generated D3DXAssembleShader and
- // D3DXCompileShader and is embedded the body of the shader.
- //
- // Parameters:
- // pFunction
- // Pointer to the function DWORD stream
- // ppDebugInfo
- // Buffer used to return debug info. For information about the layout
- // of this buffer, see definition of D3DXSHADER_DEBUGINFO above.
- //----------------------------------------------------------------------------
-
- HRESULT WINAPI
- D3DXGetShaderDebugInfo(
- CONST DWORD* pFunction,
- LPD3DXBUFFER* ppDebugInfo);
-
-
-
- //----------------------------------------------------------------------------
- // D3DXGatherFragments:
- // -------------------
- // Assembles shader fragments into a buffer to be passed to a fragment linker.
- // will generate shader fragments for all fragments in the file
- //
- // Parameters:
- // pSrcFile
- // Source file name
- // hSrcModule
- // Module handle. if NULL, current module will be used
- // pSrcResource
- // Resource name in module
- // pSrcData
- // Pointer to source code
- // SrcDataLen
- // Size of source code, in bytes
- // pDefines
- // Optional NULL-terminated array of preprocessor macro definitions.
- // pInclude
- // Optional interface pointer to use for handling #include directives.
- // If this parameter is NULL, #includes will be honored when assembling
- // from file, and will error when assembling from resource or memory.
- // Flags
- // See D3DXSHADER_xxx flags
- // ppShader
- // Returns a buffer containing the created shader fragments. This buffer contains
- // the assembled shader code, as well as any embedded debug info.
- // ppErrorMsgs
- // Returns a buffer containing a listing of errors and warnings that were
- // encountered during assembly. If you are running in a debugger,
- // these are the same messages you will see in your debug output.
- //----------------------------------------------------------------------------
-
-
- HRESULT WINAPI
- D3DXGatherFragmentsFromFileA(
- LPCSTR pSrcFile,
- CONST D3DXMACRO* pDefines,
- LPD3DXINCLUDE pInclude,
- DWORD Flags,
- LPD3DXBUFFER* ppShader,
- LPD3DXBUFFER* ppErrorMsgs);
-
- HRESULT WINAPI
- D3DXGatherFragmentsFromFileW(
- LPCWSTR pSrcFile,
- CONST D3DXMACRO* pDefines,
- LPD3DXINCLUDE pInclude,
- DWORD Flags,
- LPD3DXBUFFER* ppShader,
- LPD3DXBUFFER* ppErrorMsgs);
-
- #ifdef UNICODE
- #define D3DXGatherFragmentsFromFile D3DXGatherFragmentsFromFileW
- #else
- #define D3DXGatherFragmentsFromFile D3DXGatherFragmentsFromFileA
- #endif
-
- HRESULT WINAPI
- D3DXGatherFragmentsFromResourceA(
- HMODULE hSrcModule,
- LPCSTR pSrcResource,
- CONST D3DXMACRO* pDefines,
- LPD3DXINCLUDE pInclude,
- DWORD Flags,
- LPD3DXBUFFER* ppShader,
- LPD3DXBUFFER* ppErrorMsgs);
-
- HRESULT WINAPI
- D3DXGatherFragmentsFromResourceW(
- HMODULE hSrcModule,
- LPCWSTR pSrcResource,
- CONST D3DXMACRO* pDefines,
- LPD3DXINCLUDE pInclude,
- DWORD Flags,
- LPD3DXBUFFER* ppShader,
- LPD3DXBUFFER* ppErrorMsgs);
-
- #ifdef UNICODE
- #define D3DXGatherFragmentsFromResource D3DXGatherFragmentsFromResourceW
- #else
- #define D3DXGatherFragmentsFromResource D3DXGatherFragmentsFromResourceA
- #endif
-
-
- HRESULT WINAPI
- D3DXGatherFragments(
- LPCSTR pSrcData,
- UINT SrcDataLen,
- CONST D3DXMACRO* pDefines,
- LPD3DXINCLUDE pInclude,
- DWORD Flags,
- LPD3DXBUFFER* ppShader,
- LPD3DXBUFFER* ppErrorMsgs);
-
- typedef ID3DXFragmentLinker *LPD3DXFRAGMENTLINKER;
-
-
- //----------------------------------------------------------------------------
- // D3DXCreateFragmentLinker:
- // -------------------------
- // Creates a fragment linker with a given cache size. The interface returned
- // can be used to link together shader fragments. (both HLSL & ASM fragements)
- //
- // Parameters:
- // pDevice
- // Pointer of the device on which to create the effect
- // ShaderCacheSize
- // Size of the shader cache
- // ppFragmentLinker
- // pointer to a memory location to put the created interface pointer
- //
- //----------------------------------------------------------------------------
-
- HRESULT WINAPI
- D3DXCreateFragmentLinker(
- LPDIRECT3DDEVICE9 pDevice,
- UINT ShaderCacheSize,
- LPD3DXFRAGMENTLINKER* ppFragmentLinker);
-
-
-
- #ifdef __cplusplus
- }
- #endif //__cplusplus
-
-
- //////////////////////////////////////////////////////////////////////////////
- // Shader comment block layouts //////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////
-
- //----------------------------------------------------------------------------
- // D3DXSHADER_CONSTANTTABLE:
- // -------------------------
- // Shader constant information; included as an CTAB comment block inside
- // shaders. All offsets are BYTE offsets from start of CONSTANTTABLE struct.
- // Entries in the table are sorted by Name in ascending order.
- //----------------------------------------------------------------------------
-
- typedef struct _D3DXSHADER_CONSTANTTABLE
- {
- DWORD Size; // sizeof(D3DXSHADER_CONSTANTTABLE)
- DWORD Creator; // LPCSTR offset
- DWORD Version; // shader version
- DWORD Constants; // number of constants
- DWORD ConstantInfo; // D3DXSHADER_CONSTANTINFO[Constants] offset
-
- } D3DXSHADER_CONSTANTTABLE, *LPD3DXSHADER_CONSTANTTABLE;
-
-
- typedef struct _D3DXSHADER_CONSTANTINFO
- {
- DWORD Name; // LPCSTR offset
- WORD RegisterSet; // D3DXREGISTER_SET
- WORD RegisterIndex; // register number
- WORD RegisterCount; // number of registers
- WORD Reserved; // reserved
- DWORD TypeInfo; // D3DXSHADER_TYPEINFO offset
- DWORD DefaultValue; // offset of default value
-
- } D3DXSHADER_CONSTANTINFO, *LPD3DXSHADER_CONSTANTINFO;
-
-
- typedef struct _D3DXSHADER_TYPEINFO
- {
- WORD Class; // D3DXPARAMETER_CLASS
- WORD Type; // D3DXPARAMETER_TYPE
- WORD Rows; // number of rows (matrices)
- WORD Columns; // number of columns (vectors and matrices)
- WORD Elements; // array dimension
- WORD StructMembers; // number of struct members
- DWORD StructMemberInfo; // D3DXSHADER_STRUCTMEMBERINFO[Members] offset
-
- } D3DXSHADER_TYPEINFO, *LPD3DXSHADER_TYPEINFO;
-
-
- typedef struct _D3DXSHADER_STRUCTMEMBERINFO
- {
- DWORD Name; // LPCSTR offset
- DWORD TypeInfo; // D3DXSHADER_TYPEINFO offset
-
- } D3DXSHADER_STRUCTMEMBERINFO, *LPD3DXSHADER_STRUCTMEMBERINFO;
-
-
-
- #endif //__D3DX9SHADER_H__
-
-